From cc780116a2e576922a3fd7694ab57409b4e3e4d4 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 19 Feb 2015 16:44:18 +0100 Subject: [PATCH] dnd: Set the parent DnD wayland surface on gtk_drag_set_icon_window() This is a better place to call this, both lets us remove all other calls, and additionally handles the gtk_drag_set_icon_widget() entry point. --- gtk/gtkdnd.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 733af5e398..576f67d421 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -3081,6 +3081,7 @@ gtk_drag_set_icon_window (GdkDragContext *context, gboolean destroy_on_release) { GtkDragSourceInfo *info; + GdkDisplay *display; info = gtk_drag_get_source_info (context, FALSE); if (info == NULL) @@ -3100,6 +3101,19 @@ gtk_drag_set_icon_window (GdkDragContext *context, info->hot_y = hot_y; info->destroy_icon = destroy_on_release; + display = gdk_window_get_display (gdk_drag_context_get_source_window (context)); + +#ifdef GDK_WINDOWING_WAYLAND + if (GTK_IS_WINDOW (widget) && GDK_IS_WAYLAND_DISPLAY (display)) + { + if (gtk_widget_get_realized (widget)) + gtk_widget_unrealize (widget); + + gtk_window_set_hardcoded_window (GTK_WINDOW (widget), + gdk_wayland_drag_context_get_dnd_window (context)); + } +#endif + if (widget && info->icon_helper) g_clear_object (&info->icon_helper); @@ -3176,12 +3190,6 @@ set_icon_helper (GdkDragContext *context, gtk_widget_get_style_context (window), &width, &height); -#ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_DISPLAY (display)) - gtk_window_set_hardcoded_window (GTK_WINDOW (window), - gdk_wayland_drag_context_get_dnd_window (context)); -#endif - if (!force_window && gtk_drag_can_use_rgba_cursor (display, width + 2, height + 2)) { @@ -3403,12 +3411,6 @@ gtk_drag_set_icon_surface (GdkDragContext *context, gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND); set_can_change_screen (window, TRUE); -#ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_DISPLAY (gdk_screen_get_display (screen))) - gtk_window_set_hardcoded_window (GTK_WINDOW (window), - gdk_wayland_drag_context_get_dnd_window (context)); -#endif - gtk_widget_set_events (window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_widget_set_app_paintable (window, TRUE); -- 2.30.2